package com.atguigu.srb.core.controller.admin;


import com.atguigu.srb.base.response.R;
import com.atguigu.srb.core.pojo.entity.Lend;
import com.atguigu.srb.core.pojo.entity.vo.BorrowApprovalVO;
import com.atguigu.srb.core.pojo.entity.vo.LendDetailVO;
import com.atguigu.srb.core.service.LendService;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 * 标的准备表 前端控制器
 * </p>
 *
 * @author Atguigu
 * @since 2023-05-26
 */
@RestController
@RequestMapping("/admin/core/lend")
public class AdminLendController {
    @Resource
    LendService lendService;

    /**
     * 放款：
     *      当标的募资金额达到要求时，管理员可以在管理控制台对标的进行放款
     *          借款人账户必须正常
     *          标的状态必须是募资中
     *          1、同步访问hfb的放款接口：
     *              hfb会根据放款的标的的项目编号找到投资记录，将冻结的投资人的投资金额扣除转到借款人账户
     *          2、hfb返回成功后
     *              2.1 将募资到的总金额转到借款人账户(扣除手续费)
     *                  保存交易日志
     *              2.2 扣除投资人对该标的投资冻结的金额
     *              2.3 给借款人生成还款计划(一个标的生成 还款期数个 还款计划)
     *              2.4 给投资人生成回款计划(一个标的的每一个投资记录 都要生成 还款期数个 回款计划)
     *          3、hfb返回失败：一定要介入分析失败原因
     * @param id
     * @return
     */
    @ApiOperation("满标放款")
    @PostMapping("makeLoan/{id}")
    public R makeLoad(@PathVariable("id")String id){
        lendService.makeLoad(id);
        return R.ok();
    }
    @ApiOperation("查询标的详情")
    @GetMapping("{id}")
    public R getById(@PathVariable("id")String id){
        LendDetailVO lendDetailVO = lendService.getLendDetailVOById(id);
        return R.ok().data("item",lendDetailVO);
    }
    @ApiOperation("查询标的列表")
    @GetMapping
    public R list(){
        List<Lend> lends = lendService.listLends();
        return R.ok().data("items",lends);
    }


    //借款信息审批接口
    // 接收前端提交的数据 保存到数据库
    // 1、自定义vo类接收数据
    // 2、校验用户、借款信息状态.....
    // 3、生成新标的保存+ 更新借款信息的审批状态
    @ApiOperation("借款审批")
    @PostMapping("approval")
    public R approval(@RequestBody BorrowApprovalVO borrowApprovalVO){
        lendService.borrowApproval(borrowApprovalVO);
        return R.ok();
    }




}

